﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using AdmLaboratorios.DTO;
using AdmLaboratorios.Business;

namespace AdmLaboratorios
{
    public partial class frmAsignacionProductos : Form
    {
        public PartnerDTO Partner { get; set; }
        //public ProductoDTO Producto { get; set; }

        public DataTable dt { get; set; }

        public frmAsignacionProductos()
        {
            InitializeComponent();
        }

        private void frmAsignacionProductos_Load(object sender, EventArgs e)
        {
            btnGuardar.Enabled = false;

            BuildDataTable();
        }

        private void btPartner_Click(object sender, EventArgs e)
        {
            using (frmPartnerConsulta f = new frmPartnerConsulta())
            {
                FormsHelper.CargarColumnasGrilla(f);
                if (f.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    CleanControls();
                    this.Partner = f.Partner;
                    txPartner.Text = Partner.Nombre;

                    RefreshGrid();
                    tbProductos.Enabled = true;
                    btnGuardar.Enabled = true;
                }
            }
        }

        private void RefreshGrid()
        {
            if (Partner != null)
            {
                dt = PartnersProductos.GetPartnersProductos(Partner);

                gvProductos.DataSource = null;
                gvProductos.DataSource = dt;
                btnGuardar.Enabled = true;
                lbIProductosCount.Text = dt.Rows.Count.ToString();
            }
        }

        private void BuildDataTable()
        {
            dt = new DataTable();

            dt.Columns.Add("Id", typeof(int));
            dt.Columns.Add("NombreComercial");
            dt.Columns.Add("Nombre");
            dt.Columns.Add("Obs");
            dt.Columns.Add("UnidadMedida");
            dt.Columns.Add("CodigoBarrasInterno");
            dt.Columns.Add("CodigoBarrasExterno");
            dt.Columns.Add("Tipo");
            dt.Columns.Add("Codigo");
            dt.Columns.Add("Activo");

            dt.AcceptChanges();
        }

        private void CleanControls()
        {
            dt.Clear();
        }

        private void btCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btRemove_Click(object sender, EventArgs e)
        {
            if (gvProductos.SelectedRows.Count == 1)
            {
                if (MessageBox.Show("¿Está seguro de que desea quitar la relación al producto seleccionado?",
                    "Quitar Producto", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                {
                    dt.Rows.Remove(
                        ((DataRowView)gvProductos.SelectedRows[0].DataBoundItem).Row);

                    lbIProductosCount.Text = dt.Rows.Count.ToString();
                }
            }
        }

        private void btEdit_Click(object sender, EventArgs e)
        {
            Modificar();
        }

        private void Modificar()
        {
            if (gvProductos.SelectedRows.Count == 1)
            {
                using (frmProductoABM f = new frmProductoABM())
                {
                    f.LoadProducto(Productos.Get((int)gvProductos.SelectedRows[0].Cells["Id"].Value));
                    FormsHelper.CargarColumnasGrilla(f);
                    if (f.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                    {
                        var Producto = f.Producto;

                        DataRow dr = ((DataRowView)gvProductos.SelectedRows[0].DataBoundItem).Row;
                        dr["Id"] = Producto.Id;
                        dr["NombreComercial"] = Producto.NombreComercial;
                        dr["Nombre"] = Producto.Nombre;
                        dr["Obs"] = Producto.Obs;
                        dr["UnidadMedida"] = Producto.UnidadMedida;
                        dr["CodigoBarrasInterno"] = Producto.CodigoBarrasInterno;
                        dr["CodigoBarrasExterno"] = Producto.CodigoBarrasExterno;
                        dr["Tipo"] = Producto.Tipo;
                        dr["Codigo"] = Producto.Codigo;
                        dr["Activo"] = Producto.Activo;

                        //gvProductos.DataSource = null;
                        //gvProductos.DataSource = dt;
                    }
                }
            }
        }

        private void btAddNew_Click(object sender, EventArgs e)
        {
            using (frmProductoABM f = new frmProductoABM())
            {
                FormsHelper.CargarColumnasGrilla(f);
                if (f.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    var Producto = f.Producto;

                    dt.Rows.Add(Producto.Id,
                        Producto.NombreComercial,
                        Producto.Nombre,
                        Producto.Obs,
                        Producto.UnidadMedida,
                        Producto.CodigoBarrasInterno,
                        Producto.CodigoBarrasExterno,
                        Producto.Tipo,
                        Producto.Codigo,
                        Producto.Activo);

                    lbIProductosCount.Text = dt.Rows.Count.ToString();

                    gvProductos.DataSource = null;
                    gvProductos.DataSource = dt;
                }
            }
        }

        private void picPartnerDetalle_Click(object sender, EventArgs e)
        {
            if (this.Partner != null)
            {
                using (frmPartnerDetalle f = new frmPartnerDetalle())
                {
                    f.Partner = this.Partner;
                    FormsHelper.CargarColumnasGrilla(f);
                    f.ShowDialog();
                }
            }
            else
            {
                MessageBox.Show("Debe seleccionar un Partner para poder ver su detalle.",
                    "Detalle de Partner", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btAddExisting_Click(object sender, EventArgs e)
        {
            using (frmProductoSeleccionOP f = new frmProductoSeleccionOP())
            {
                f.Partner = this.Partner;
                f.cbProductosDelPartner.Checked = false;
                FormsHelper.CargarColumnasGrilla(f);
                if (f.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {

                    foreach (ProductoDTO producto in f.ProductoList)
                    {
                        var Producto = producto;

                        dt.DefaultView.RowFilter = "Id=" + producto.Id;
                        if (dt.DefaultView.Count == 0)
                        {
                            dt.Rows.Add(Producto.Id,
                                Producto.NombreComercial,
                                Producto.Nombre,
                                Producto.Obs,
                                Producto.UnidadMedida,
                                Producto.CodigoBarrasInterno,
                                Producto.CodigoBarrasExterno,
                                Producto.Tipo,
                                Producto.Codigo,
                                Producto.Activo);
                        }
                    }
                    dt.DefaultView.RowFilter = string.Empty;

                    lbIProductosCount.Text = dt.Rows.Count.ToString();

                    gvProductos.DataSource = null;
                    gvProductos.DataSource = dt;
                }
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                Productos.Asignar(Partner, dt);
                FormsHelper.MsgGuardadoOk();
            }
            catch (Exception ex)
            {
                FormsHelper.MsgErrorInesperado(ex);
            }
        }

        private void gvProductos_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            Modificar();
        }

    }
}
